' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2023.10.26.02.14]) on 2023.11.05 at 03:52 (Coordinated Universal Time)
_TITLE "BAM Draw"
' Program by Charlie Veniot
' 🟠🟠🟠 DECLARATIONS
' screen variables
DIM w% = 0, h% = 0, minw% = 52, maxw% = 260, minh% = 1, maxh% = 51
DIM grid% = TRUE
' menu variables
DIM menuh% = 3
' pen variables
DIM pen$
' 🟠🟠🟠 MAIN PROGRAM
GOSUB ⚙init_program
🔃drawing_cycle:
GOSUB ♻do_refresh
LET temp$ = INKEY$
IF temp$ <> "" THEN pen$ = temp$ : GOSUB ✒set_pen
IF _MOUSEBUTTON THEN
IF _MOUSEZONE (0, 0, _WIDTH, [_HEIGHT-(menuh%*8)] ) THEN _
LET x% = _MOUSEX : _
LET y% = _MOUSEY : _
GOSUB ✒do_pen_stroke : GOTO ⏩done
IF _MOUSEZONE(0, yMAX - 15, 40, 8 ) THEN GOSUB ✒change_pen : GOTO ⏩done
IF _MOUSEZONE(0, yMAX - 7, 32, 8 ) THEN GOSUB 🖥toggle_grid : GOTO ⏩done
⏩done:
END IF
GOTO 🔃drawing_cycle
END
' 🟠🟠🟠 SUBROUTINES
⚙init_program:
SetLocalStorageItem( _
"draw:width", _
MAX( minw%, _
_PROMPT( "Canvas Width (i.e. how many characters wide, minimum = " + minw% + ")", minw%) ) )
SetLocalStorageItem( _
"draw:height", _
MAX( minh%, _
_PROMPT( "Canvas Width (i.e. how many characters wide, minimum = " + minh% + ")", 20) ) )
RETURN
🖥toggle_grid:
WHILE _MOUSEBUTTON : WEND
grid% = NOT grid%
IF grid% THEN GOSUB 🖥do_grid ELSE GOSUB 🖥undo_grid
RETURN
🖥do_grid:
FOR i = 0 TO xMAX STEP 8
LINE (i,0) TO (i,(yMAX-menuh%*8)), 7
NEXT i
FOR i = 7 TO (yMAX-menuh%*8) STEP 8
LINE (0,i) TO (xMAX,i), 7
NEXT i
RETURN
🖥undo_grid:
FOR i = 0 TO xMAX STEP 8
LINE (i,0) TO (i,(yMAX-menuh%*8)), 0
NEXT i
FOR i = 7 TO (yMAX-menuh%*8) STEP 8
LINE (0,i) TO (xMAX,i), 0
NEXT i
RETURN
📐do_canvas_resize:
IF w% <> [ MAX(minw%, GetLocalStorageItem( "draw:width" ) ) ] * 8 _
OR h% <> [ MAX(minh%, GetLocalStorageItem( "draw:height" ) ) + menuh% ] * 8 _
THEN
LET w% = [ MAX(minw%, GetLocalStorageItem( "draw:width" ) ) ] * 8
LET h% = [ MAX(minh%, GetLocalStorageItem( "draw:height" ) ) + menuh% ] * 8
SCREEN _NEWIMAGE( w%, h%, 7 )
GOSUB 🖥do_grid
LINE (0,_HEIGHT-20) TO (xMAX,_HEIGHT-20), 15
LOCATE (_HEIGHT/8)-1, 1 : PRINT "Pen:";
LOCATE (_HEIGHT/8), 1 : PRINT "Grid";
END IF
RETURN
♻do_refresh:
GOSUB 📐do_canvas_resize
RETURN
✒change_pen:
WHILE _MOUSEBUTTON : WEND
LET pen$ = LEFT$(_PROMPT("Enter one simple keyboard character as a new pen shape.", pen$), 1)
GOSUB ✒set_pen
RETURN
✒do_pen_stroke:
new_y = FIX(y%/8)+1 : new_x = FIX(x%/8)+1
LET f_color = 15 : LET b_color = 0
LOCATE new_y, new_x : PRINT pen$;
IF grid% THEN GOSUB 🖥do_grid
SetLocalStorageItem( "draw:stroke:" + new_y + "," + new_x, pen$ + " " + f_color + "," + b_color)
RETURN
✒set_pen:
LOCATE (_HEIGHT/8)-1, 5 : PRINT pen$;
SetLocalStorageItem( "draw:pen", pen$ )
RETURN